﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BorisTheBlade
{
	/// <summary>
	/// Содержит текущую биржевую информацию о финансовых инструментах, относящихся к различным режимам торгов.
	/// Каждая строка таблицы соответствует уникальной паре [Режим торгов][Код инструмента]
	/// </summary>
	class WrapperSecurities
	{
		private int m_SecID;
		/// <summary>
		/// Идентификатор финансового инструмента
		/// </summary>
		public int SecID { get { return m_SecID; } set { m_SecID = value; } }

		private string m_SecBoard;
		/// <summary>
		/// Код режима торгов для финансового инструмента
		/// </summary>
		public string SecBoard { get { return m_SecBoard; } set { m_SecBoard = value; } }

		private string m_SecCode;
		/// <summary>
		/// Код финансового инструмента
		/// </summary>
		public string SecCode { get { return m_SecCode; } set { m_SecCode = value; } }

		private string m_IssueCode;
		/// <summary>
		/// Код выпуска ценной бумаги
		/// </summary>
		public string IssueCode { get { return m_IssueCode; } set { m_IssueCode = value; } }

		private string m_SecName;
		/// <summary>
		/// Наименование финансового инструмента
		/// </summary>
		public string SecName { get { return m_SecName; } set { m_SecName = value; } }

		private string m_ShortName;
		/// <summary>
		/// Краткое наименование финансового инструмента
		/// </summary>
		public string ShortName { get { return m_ShortName; } set { m_ShortName = value; } }

		private string m_LatName;
		/// <summary>
		/// Краткое наименование финансового инструмента на английском языке
		/// </summary>
		public string LatName { get { return m_LatName; } set { m_LatName = value; } }

		private string m_Remarks;
		/// <summary>
		/// Примечания
		/// </summary>
		public string Remarks { get { return m_Remarks; } set { m_Remarks = value; } }

		private string m_MarketCode;
		/// <summary>
		/// Код рынка на котором торгуется финансовый инструмент
		/// </summary>
		public string MarketCode { get { return m_MarketCode; } set { m_MarketCode = value; } }

		private string m_ConCode;
		/// <summary>
		/// Код контракта (для фьючерсов и опционов)
		/// </summary>
		public string ConCode { get { return m_ConCode; } set { m_ConCode = value; } }

		private string m_DepoCode;
		/// <summary>
		/// Код депо
		/// </summary>
		public string DepoCode { get { return m_DepoCode; } set { m_DepoCode = value; } }

		private string m_Description;
		/// <summary>
		/// Описание финансового инструмента
		/// </summary>
		public string Description { get { return m_Description; } set { m_Description = value; } }

		private string m_Status;
		/// <summary>
		/// Состояние: "A" – торговые операции разрешены, "S" – торговые операции запрещены
		/// </summary>
		public string Status { get { return m_Status; } set { m_Status = value; } }

		private string m_TradingStatus;
		/// <summary>
		/// Состояние торговой сессии по инструменту: "N" – недоступно для торгов, "O" – период открытия, "C" – торги закрыты, "F" – период закрытия, "B" – перерыв, "T" – торговая сессия
		/// </summary>
		public string TradingStatus { get { return m_TradingStatus; } set { m_TradingStatus = value; } }

		private int m_Decimals;
		/// <summary>
		/// Количество знаков после запятой для полей формата PRICE
		/// </summary>
		public int Decimals { get { return m_Decimals; } set { m_Decimals = value; } }

		private int m_LotSize;
		/// <summary>
		/// Количество ценных бумаг в одном стандартном лоте
		/// </summary>
		public int LotSize { get { return m_LotSize; } set { m_LotSize = value; } }

		private int m_LotStep;
		/// <summary>
		/// Кратность объема заявки, в лотах (если <= 0, то следует игнорировать это поле)
		/// </summary>
		public int LotStep { get { return m_LotStep; } set { m_LotStep = value; } }
		
		private double m_MinStep;
		/// <summary>
		/// Минимально возможная разница между ценами, указанными в заявках на покупку/продажу ценных бумаг
		/// </summary>
		public double MinStep { get { return m_MinStep; } set { m_MinStep = value; } }

		private double m_StepPrice;
		/// <summary>
		/// Стоимость шага цены
		/// </summary>
		public double StepPrice { get { return m_StepPrice; } set { m_StepPrice = value; } }

		private int m_Precision;
		/// <summary>
		/// Разрядность полей формата PRICE
		/// </summary>
		public int Precision { get { return m_Precision; } set { m_Precision = value; } }

		private double m_FaceValue;
		/// <summary>
		/// Номинальная стоимость одной ценной бумаги, в валюте инструмента
		/// </summary>
		public double FaceValue { get { return m_FaceValue; } set { m_FaceValue = value; } }

		private string m_FaceUnit;
		/// <summary>
		/// Код валюты, в которой выражен номинал ценной бумаги
		/// </summary>
		public string FaceUnit { get { return m_FaceUnit; } set { m_FaceUnit = value; } }

		private DateTime m_PrevDate;
		/// <summary>
		/// Дата предыдущего торгового дня
		/// </summary>
		public DateTime PrevDate { get { return m_PrevDate; } set { m_PrevDate = value; } }

		private double m_PrevPrice;
		/// <summary>
		/// Цена последней сделки предыдущего торгового дня
		/// </summary>
		public double PrevPrice { get { return m_PrevPrice; } set { m_PrevPrice = value; } }

		private double m_ClosePrice;
		/// <summary>
		/// Цена периода закрытия
		/// </summary>
		public double ClosePrice { get { return m_ClosePrice; } set { m_ClosePrice = value; } }

		private double m_CloseYield;
		/// <summary>
		/// Доходность по цене периода закрытия
		/// </summary>
		public double CloseYield { get { return m_CloseYield; } set { m_CloseYield = value; } }

		private double m_CouponValue;
		/// <summary>
		/// Величина купона, выраженная в рублях
		/// </summary>
		public double CouponValue { get { return m_CouponValue; } set { m_CouponValue = value; } }

		private int m_CouponPeriod;
		/// <summary>
		/// Длительность купона, выраженная в днях
		/// </summary>
		public int CouponPeriod { get { return m_CouponPeriod; } set { m_CouponPeriod = value; } }

		private DateTime m_NextCoupon;
		/// <summary>
		/// Дата выплаты купона
		/// </summary>
		public DateTime NextCoupon { get { return m_NextCoupon; } set { m_NextCoupon = value; } }

		private double m_IssueSize;
		/// <summary>
		/// Объем обращения
		/// </summary>
		public double IssueSize { get { return m_IssueSize; } set { m_IssueSize = value; } }

		private double m_Repo2Price;
		/// <summary>
		/// Цена второй части РЕПО
		/// </summary>
		public double Repo2Price { get { return m_Repo2Price; } set { m_Repo2Price = value; } }

		private string m_CurrencyID;
		/// <summary>
		/// Код сопряженной валюты ценной бумаги
		/// </summary>
		public string CurrencyID { get { return m_CurrencyID; } set { m_CurrencyID = value; } }

		private double m_BuyBackPrice;
		/// <summary>
		/// Цена оферты
		/// </summary>
		public double BuyBackPrice { get { return m_BuyBackPrice; } set { m_BuyBackPrice = value; } }

		private DateTime m_BuyBackDate;
		/// <summary>
		/// Дата оферты
		/// </summary>
		public DateTime BuyBackDate { get { return m_BuyBackDate; } set { m_BuyBackDate = value; } }

		private string m_AgentID;
		/// <summary>
		/// Агент по размещению
		/// </summary>
		public string AgentID { get { return m_AgentID; } set { m_AgentID = value; } }

		private string m_QuoteBasis;
		/// <summary>
		/// Тип цены: "R" – цена указывается за единицу финансового инструмента, "A" – цена указывается за номинал финансового инструмента, "F" – цена указывается в процентах от номинала
		/// </summary>
		public string QuoteBasis { get { return m_QuoteBasis; } set { m_QuoteBasis = value; } }

		private string m_ISIN;
		/// <summary>
		/// Международный идентификационный код ценной бумаги
		/// </summary>
		public string ISIN { get { return m_ISIN; } set { m_ISIN = value; } }

		private string m_RegNumber;
		/// <summary>
		/// Номер государственной регистрации
		/// </summary>
		public string RegNumber { get { return m_RegNumber; } set { m_RegNumber = value; } }

		private double m_PrevWaPrice;
		/// <summary>
		/// Значение оценки предыдущего торгового дня
		/// </summary>
		public double PrevWaPrice { get { return m_PrevWaPrice; } set { m_PrevWaPrice = value; } }

		private double m_YieldAtPrevWaPrice;
		/// <summary>
		/// Доходность по оценке предыдущего торгового дня
		/// </summary>
		public double YieldAtPrevWaPrice { get { return m_YieldAtPrevWaPrice; } set { m_YieldAtPrevWaPrice = value; } }

		private double m_WaPrice;
		/// <summary>
		/// Средневзвешенная цена
		/// </summary>
		public double WaPrice { get { return m_WaPrice; } set { m_WaPrice = value; } }

		private double m_YieldAtWaPrice;
		/// <summary>
		/// Доходность по средневзвешенной цене
		/// </summary>
		public double YieldAtWaPrice { get { return m_YieldAtWaPrice; } set { m_YieldAtWaPrice = value; } }

		private int m_Contracts;
		/// <summary>
		/// Количество заключенных контрактов
		/// </summary>
		public int Contracts { get { return m_Contracts; } set { m_Contracts = value; } }

		private int m_OpenPos;
		/// <summary>
		/// Количество открытых позиций
		/// </summary>
		public int OpenPos { get { return m_OpenPos; } set { m_OpenPos = value; } }

		private DateTime m_ModTime;
		/// <summary>
		/// Время модификации
		/// </summary>
		public DateTime ModTime { get { return m_ModTime; } set { m_ModTime = value; } }

		private DateTime m_Cancellation;
		/// <summary>
		/// Дата окончания обращения инструмента
		/// </summary>
		public DateTime Cancellation { get { return m_Cancellation; } set { m_Cancellation = value; } }

		private DateTime m_ExecTerm;
		/// <summary>
		/// Дата исполнения контракта
		/// </summary>
		public DateTime ExecTerm { get { return m_ExecTerm; } set { m_ExecTerm = value; } }

		private double m_BuyDeposit;
		/// <summary>
		/// Гарантийные обязательства покупателя, в рублях
		/// </summary>
		public double BuyDeposit { get { return m_BuyDeposit; } set { m_BuyDeposit = value; } }

		private double m_SellDeposit;
		/// <summary>
		/// Гарантийные обязательства продавца, в рублях
		/// </summary>
		public double SellDeposit { get { return m_SellDeposit; } set { m_SellDeposit = value; } }

		private string m_OptionType;
		/// <summary>
		/// Тип опциона: "C" – Call опцион, "P" – Put опцион
		/// </summary>
		public string OptionType { get { return m_OptionType; } set { m_OptionType = value; } }

		private string m_OptionStyle;
		/// <summary>
		/// Разновидность опциона: "A" – американский опцион, "E" – европейский опцион
		/// </summary>
		public string OptionStyle { get { return m_OptionStyle; } set { m_OptionStyle = value; } }

		private double m_Strike;
		/// <summary>
		/// Цена страйк
		/// </summary>
		public double Strike { get { return m_Strike; } set { m_Strike = value; } }

		private string m_FutCode;
		/// <summary>
		/// Код фьючерсного инструмента
		/// </summary>
		public string FutCode { get { return m_FutCode; } set { m_FutCode = value; } }

		private double m_FutPrice;
		/// <summary>
		/// Котировка фьючерсного инструмента
		/// </summary>
		public double FutPrice { get { return m_FutPrice; } set { m_FutPrice = value; } }

		private double m_OptPrice;
		/// <summary>
		/// Расчетная цена опциона, в рублях
		/// </summary>
		public double OptPrice { get { return m_OptPrice; } set { m_OptPrice = value; } }

		private double m_Volatility;
		/// <summary>
		/// Волатильность финансового инструмента, %
		/// </summary>
		public double Volatility { get { return m_Volatility; } set { m_Volatility = value; } }

		private double m_PriceMax;
		/// <summary>
		/// Верхний лимит цены
		/// </summary>
		public double PriceMax { get { return m_PriceMax; } set { m_PriceMax = value; } }

		private double m_PriceMin;
		/// <summary>
		/// Нижний лимит цены
		/// </summary>
		public double PriceMin { get { return m_PriceMin; } set { m_PriceMin = value; } }

		private double m_HPriceLimit;
		/// <summary>
		/// Верхний лимит цены (задается относительно PrevPrice)
		/// </summary>
		public double HPriceLimit { get { return m_HPriceLimit; } set { m_HPriceLimit = value; } }

		private double m_LPriceLimit;
		/// <summary>
		/// Нижний лимит цены (задается относительно PrevPrice)
		/// </summary>
		public double LPriceLimit { get { return m_LPriceLimit; } set { m_LPriceLimit = value; } }

		private string m_Type;
		/// <summary>
		/// Тип финансового инструмента: "S" – немаржинальные акции, "M" – маржинальные акции, "O" – немаржинальные облигации, "B" – маржинальные облигации
		/// </summary>
		public string Type { get { return m_Type; } set { m_Type = value; } }

		private double m_Bid;
		/// <summary>
		/// Лучшая котировка на покупку
		/// </summary>
		public double Bid { get { return m_Bid; } set { m_Bid = value; } }

		private int m_BidDepth;
		/// <summary>
		/// Объем заявок на покупку по лучшей котировке, выраженный в единицах ценных бумаг
		/// </summary>
		public int BidDepth { get { return m_BidDepth; } set { m_BidDepth = value; } }

		private int m_BidDepthT;
		/// <summary>
		/// Объем всех заявок на покупку в очереди торговой системы, выраженный в единицах ценных бумаг
		/// </summary>
		public int BidDepthT { get { return m_BidDepthT; } set { m_BidDepthT = value; } }

		private int m_NumBids;
		/// <summary>
		/// Количество заявок на покупку в очереди торговой системы
		/// </summary>
		public int NumBids { get { return m_NumBids; } set { m_NumBids = value; } }

		private double m_HighBid;
		/// <summary>
		/// Наибольшая цена спроса в течение торговой сессии
		/// </summary>
		public double HighBid { get { return m_HighBid; } set { m_HighBid = value; } }

		private double m_Offer;
		/// <summary>
		/// Лучшая котировка на продажу
		/// </summary>
		public double Offer { get { return m_Offer; } set { m_Offer = value; } }

		private int m_OfferDepth;
		/// <summary>
		/// Объем заявок на продажу по лучшей котировке, выраженный в единицах ценных бумаг
		/// </summary>
		public int OfferDepth { get { return m_OfferDepth; } set { m_OfferDepth = value; } }

		private int m_OfferDepthT;
		/// <summary>
		/// Объем всех заявок на продажу в очереди торговой системы, выраженный в единицах ценных бумаг
		/// </summary>
		public int OfferDepthT { get { return m_OfferDepthT; } set { m_OfferDepthT = value; } }

		private int m_NumOffers;
		/// <summary>
		/// Количество заявок на продажу в очереди торговой системы
		/// </summary>
		public int NumOffers { get { return m_NumOffers; } set { m_NumOffers = value; } }

		private double m_LowOffer;
		/// <summary>
		/// Наименьшая цена предложения в течение торговой сессии
		/// </summary>
		public double LowOffer { get { return m_LowOffer; } set { m_LowOffer = value; } }

		private double m_Open;
		/// <summary>
		/// Цена открытия
		/// </summary>
		public double Open { get { return m_Open; } set { m_Open = value; } }

		private double m_Low;
		/// <summary>
		/// Минимальное значение цены в текущей сессии
		/// </summary>
		public double Low { get { return m_Low; } set { m_Low = value; } }

		private double m_High;
		/// <summary>
		/// Максимальное значение цены в текущей сессии
		/// </summary>
		public double High { get { return m_High; } set { m_High = value; } }

		private double m_Last;
		/// <summary>
		/// Цена последней сделки
		/// </summary>
		public double Last { get { return m_Last; } set { m_Last = value; } }

		private double m_LastChange;
		/// <summary>
		/// Изменение цены последней сделки по отношению к цене последней сделки предыдущего торгового дня
		/// </summary>
		public double LastChange { get { return m_LastChange; } set { m_LastChange = value; } }

		private int m_Quantity;
		/// <summary>
		/// Количество лотов в последней сделке
		/// </summary>
		public int Quantity { get { return m_Quantity; } set { m_Quantity = value; } }

		private double m_Yield;
		/// <summary>
		/// Доходность, рассчитанная по цене сделки
		/// </summary>
		public double Yield { get { return m_Yield; } set { m_Yield = value; } }

		private double m_AccruedInt;
		/// <summary>
		/// Накопленный купонный доход на дату торгов в расчете на одну бумагу, выраженный в рублях.
		/// </summary>
		public double AccruedInt { get { return m_AccruedInt; } set { m_AccruedInt = value; } }

		private string m_PrimaryDist;
		/// <summary>
		/// Индикатор информирующий, что по данному инструменту проводится аукцион ("Y" – да, "N" – нет)
		/// </summary>
		public string PrimaryDist { get { return m_PrimaryDist; } set { m_PrimaryDist = value; } }

		private DateTime m_MatDate;
		/// <summary>
		/// Дата погашения
		/// </summary>
		public DateTime MatDate { get { return m_MatDate; } set { m_MatDate = value; } }

		private DateTime m_Time;
		/// <summary>
		/// Время последней сделки
		/// </summary>
		public DateTime Time { get { return m_Time; } set { m_Time = value; } }

		private int m_NumTrades;
		/// <summary>
		/// Количество сделок за торговый день
		/// </summary>
		public int NumTrades { get { return m_NumTrades; } set { m_NumTrades = value; } }

		private long m_VolToday;
		/// <summary>
		/// Объем совершенных сделок, выраженный в единицах ценных бумаг
		/// </summary>
		public long VolToday { get { return m_VolToday; } set { m_VolToday = value; } }

		private double m_ValToday;
		/// <summary>
		/// Объем совершенных сделок, выраженный в рублях.
		/// </summary>
		public double ValToday { get { return m_ValToday; } set { m_ValToday = value; } }

		private double m_Value;
		/// <summary>
		/// Объем последней сделки, выраженный в рублях
		/// </summary>
		public double Value { get { return m_Value; } set { m_Value = value; } }

		private double m_MarketPrice;
		/// <summary>
		/// Рыночная цена предыдущего торгового дня
		/// </summary>
		public double MarketPrice { get { return m_MarketPrice; } set { m_MarketPrice = value; } }

		private double m_MarketPriceToday;
		/// <summary>
		/// Рыночная цена по результатам торгов текущего торгового дня
		/// </summary>
		public double MarketPriceToday { get { return m_MarketPriceToday; } set { m_MarketPriceToday = value; } }

		private double m_MarketPrice2;
		/// <summary>
		/// Рыночная цена 2, рассчитываемая в соответствии с методикой ФСФР
		/// </summary>
		public double MarketPrice2 { get { return m_MarketPrice2; } set { m_MarketPrice2 = value; } }

		private double m_LPrevPrice;
		/// <summary>
		/// Официальная цена закрытия предыдущего торгового дня
		/// </summary>
		public double LPrevPrice { get { return m_LPrevPrice; } set { m_LPrevPrice = value; } }

		private double m_LOpenPrice;
		/// <summary>
		/// Официальная цена закрытия предыдущего торгового дня
		/// </summary>
		public double LOpenPrice { get { return m_LOpenPrice; } set { m_LOpenPrice = value; } }

		private double m_LCurrentPrice;
		/// <summary>
		/// Официальная текущая цена
		/// </summary>
		public double LCurrentPrice { get { return m_LCurrentPrice; } set { m_LCurrentPrice = value; } }

		private double m_LClosePrice;
		/// <summary>
		/// Официальная цена закрытия
		/// </summary>
		public double LClosePrice { get { return m_LClosePrice; } set { m_LClosePrice = value; } }

		private string m_Ticker;
		/// <summary>
		/// Наименование для главного инструмента
		/// </summary>
		public string Ticker { get { return m_Ticker; } set { m_Ticker = value; } }


	}
}
